/*
在定义构造函数的时候，可以使用冒号的方式 引用出 构造函数额初始化列表

格式：
	类名(构造函数实参列表)
		:成员1(初值),成员2)(初值)
		{
			 构造函数函数体
		}
*/

/*
使用初始化列表的条件
 1.成员变量与构造函数实参重名
 2.成员变量中有被const修饰的变量
 3.成员变量中有引用&
 4.有成员子类，并且需要调用===成员子类的===有参构造函数

*/
#include <iostream>
#include <string>

using namespace std;

// 成员子类
class stu1
{
private:
	/* data */
public:
	stu1(/* args */)
	{
		cout << "无参构造" << endl;
	};
	stu1(int val)
	{
		cout << "有参构造 val = " << val << endl;
	}
};

class stu2
{
private:
	string &name;
	const int id;

	// 成员子类
	stu1 stu;

public:
	stu2(/* args */);
	stu2(string name, int id) : name(name), id(id), stu(10)
	{
		cout << name << "   " << id << endl;
	}
};

int main(int argc, char const *argv[])
{

	stu2 s1("华清远见", 24071);

	return 0;
}
